Personal computer systems in general and IBM personal computers in particular have attained widespread use for providing computer power to many segments of today's modern society. Personal computer systems can usually be defined as a desk top, floor standing, or portable microcomputer that includes a system unit having a system processor, a display monitor, a keyboard, one or more diskette drives, a fixed disk storage, and an optional printer. One of the distinguishing characteristics of these systems is the use of a motherboard or system planar to electrically connect these components together. These systems are designed primarily to give independent computing power to a single user and are inexpensively priced for purchase by individuals or small businesses. Examples of such personal computer systems are IBM's PERSONAL COMPUTER AT and IBM's PERSONAL SYSTEM/2 Models 25, 30, 50, 60, 70 and 80.
These systems can be classified into two general families. The first family, usually referred to as Family I Models, use a bus architecture exemplified by the IBM PERSONAL COMPUTER AT and other "IBM compatible" machines. The second family, referred to as Family II Models, use IBM's MICRO CHANNEL bus architecture exemplified by IBM's PERSONAL SYSTEM/2 Models 50 through 80. The Family I models typically have used the popular INTEL 8088 or 8086 microprocessor as the system processor. These processors have the ability to address one megabyte of memory. The Family II models typically use the high speed INTEL 80286, 80386 , and 80486 microprocessors which can operate in a real mode to emulate the slower speed INTEL 8086 microprocessor or a protected mode which extends the addressing range from 1 megabyte to 4 Gigabytes for some models. In essence, the real mode feature of the 80286, 80386, and 80486 processor hardware compatibility with software written for the 8086 and 8088 microprocessors.
Beginning with the earliest personal computer system of the family I models, such as the IBM Personal Computer, it was recognized that software compatibility would be of utmost importance. In order to achieve this goal, an insulation layer of system resident code, also referred to as "microcode", was established between the hardware and software. This code provided an operational interface between a user's application program/operating system and the device to relieve the user of the concern about the characteristics of hardware devices. Eventually, the code developed into an integral piece of hardware and became known as BASIC input/output system or BIOS. BIOS allowed new devices to be added to the system, while insulating the application program from the peculiarities of the hardware. The importance of BIOS was immediately evident because it freed a device driver from depending on specific device hardware characteristics while providing the device driver with an intermediate interface to the device. For example, a BIOS diskette module permits a programmer to program the diskette drive without an indepth knowledge of the diskette drive hardware. Thus, a number of diskette drives designed and manufactured by different companies can be used in the system.
Since BIOS was an integral part of the system and controlled the movement of data in and out of the system processor, it was resident on the system planar and was shipped to the user in a read only memory (ROM). For example, BIOS in the original IBM Personal Computer occupied 8 K of ROM resident on the planar board.
As new models of the personal computer family were introduced, BIOS had to be updated and expanded to include new hardware and I/O devices. As could be expected, BIOS started to increase in memory size. For example, with the introduction of the IBM PERSONAL COMPUTER AT, BIOS grew to require 32 K bytes of ROM. Today, with the development of the Family II machines, BIOS has grown to require 128 K bytes of memory. Unfortunately, because of system constraints, this turned out to be the maximum capacity available for BIOS.
In today's memory chip technology, BIOS execution from ROM is slower than execution from RAM. ROM is usually not implemented as fast or in the same data width as RAM. Since marketability and consumer acceptance of personal computer systems is very sensitive to execution time, it was desireable to have BIOS being executed out of RAM. Thus, to speed up the execution (decrease execution time) of BIOS, BIOS was copied from the ROM resident on the planar to RAM. This permitted BIOS to execute as fast as software coexistent in the RAM (typically the operating system and application programs). However, since BIOS occupies 128 K bytes of RAM, the operating system and user application program space must relinquish the use of this particular area of RAM. In a minimally configured system for memory (1 Megabyte), the user will lose the capability to execute certain applications that require at least one megabyte of memory to run.
Referring to FIG. 1, there is shown a memory map of a previous personal computer system helpful in explaining the problem with previous systems. RAM 2 as depicted, is a one megabyte physical memory module that includes a first portion of memory or conventional memory (0-640 K) for application programs, and a second portion of memory (640 -1024 K) typically reserved for the operating system. Logical memory 4 is the memory map that the system processor addresses. In this case, the system processor can address 0-1408 K or includes 384 KB of additional memory. The additional memory will become apparent with respect to the discussion that follows. A memory controller (not shown in FIG. 1) is responsible for translating the logical addresses to actual physical addresses.
The logical memory 4 is comprised of conventional memory (0-640 K), operating system memory (640-1024 K) and a third portion of logical memory (1024-1408 K). The logical conventional memory is identical to the physical conventional memory. That is, when the system processor addresses any location below 640 K, the memory controller will exchange information directly with the corresponding physical address memory location (0-640 K).
The operating system memory (640-1024 K) is further comprised of video memory (640-768 K), Adapter ROM (768-896 K), and BIOS (896-1024 K). However, the video memory, adapter ROM, and BIOS are actually included on other storage devices in the system and are not initially stored in RAM physical memory. For example, a separate storage device as ROM 6 includes BIOS, which as shown, can be mapped into 896-1024 K of logical memory space. That is, when the system processor addresses any location between E0000H-FFFFFH, the memory controller becomes inactive and a decoder on the ROM will cause information from ROM 6 to be read. However, since video memory, adapter ROM, and BIOS are actually stored on other physical devices, the RAM physical memory as shown between 640-1024 K will remain unused.
To remedy this problem, previous memory controllers could map any system processor addresses in the range from 1024-1408 K to RAM physical address 640-1024 K. Thus, the hardware while actually having one megabyte of physical RAM, could provide the operating system with 1408 K of total logical system memory. Specifically, when the system processor addresses any location greater than FFFFFH(1024 K), the memory controller exchanges information with a corresponding physical address between 640-1024 K. This resulted in one megabyte of memory being available for application programs (0-640 K and 1024-1408 K) if BIOS was executed out of ROM. However, this did not result in a satisfactory solution because as explained before, BIOS execution out of ROM is slow.
For some of today's systems BIOS being executed out of ROM was unacceptable and therefore BIOS was transferred to RAM to decrease execution time. This had the negative effect of decreasing application programs, memory to less than one megabyte of memory (898 K total). In previous system these situations were permanent, that is the user either got BIOS executing out of ROM (slower execution) or the user got BIOS executing out of RAM (faster execution) but less than one megabyte of memory. This became a problem with the marketability of the previous systems, because some users, depending upon usage, were willing to sacrifice memory for speed or vice versa, but were locked into a particular configuration depending upon machine model.
It should be appreciated that providing the user with the ability to dynamically configure the system with either sufficient memory or improving execution is a substantial factor in achieving marketability success. Thus, there exists a need for developing a method and apparatus to programmatically either enable BIOS to be executed out of ROM and to reclaim the RAM intended for storage and execution of BIOS; or to permit BIOS to be transferred and executed out of RAM for faster execution.